#include <stdio.h>

// 1. 此处，变量a和f具有函数声明作用域，即他们只能在本行声明语句可见
void f(int size, float number);

// 2. 全局作用域
int a = 100;

int main(int argc, char const *argv[])
{
    f(1, 1.2);
    printf("[%s:%d]a: %d\n", __FUNCTION__, __LINE__, a);
    return 0;
}

void f(int size, float number)
{
    printf("[%s:%d]a: %d\n", __FUNCTION__, __LINE__, a);
    goto label;

    // 2. 局部作用域
    int a = 200;
    printf("[%s:%d]a: %d\n", __FUNCTION__, __LINE__, a);

    {
        printf("[%s:%d]a: %d\n", __FUNCTION__, __LINE__, a);
label: // 标签作用域：范围是整个代码块 { ... }
        int a = 300;
        printf("[%s:%d]a: %d\n", __FUNCTION__, __LINE__, a);
    }
    goto label;

}
